1
Gestione della Crescita dei Contenitori: Dimensione vs. Capacità
AI037Lesson 14
00:00

In C++, gestire la crescita dei contenitori è un'azione architettonica tra Dimensione (elementi attuali) e Capacità (memoria riservata). Per i contenitori contigui come vector e string, raggiungere la capacità attiva una riallocazione: il sistema trova un blocco di memoria più grande, sposta tutti gli elementi e distrugge il vecchio blocco. Questa è un'operazione costosa $O(n)$ che causa invalidazione degli iteratori—i tuoi puntatori agli elementi vecchi diventano "sospesi" e pericolosi.

1. Strategia di Espansione

Per evitare ripetute allocazioni, vector le implementazioni allocano lo spazio "buffer". Il comando c.reserve(n) imposta esplicitamente una capacità minima senza aggiungere elementi, mentre c.shrink_to_fit() è una richiesta non vincolante per restituire la memoria in eccesso al sistema operativo.

2. La Differenza tra Resize e Reserve

Mentre reserve riserva influisce solo sul buffer, resize(n) modifica attivamente la logica del contenitore. Ridurre tramite resize distrugge gli elementi, mentre l'espansione aggiunge valori inizializzati con il valore predefinito.

Dimensione (Utilizzata)Capacità AggiuntivaCapacità Totale
⚠️ ATTENZIONE: Se resize riduce il contenitore, gli iteratori agli elementi eliminati vengono invalidati. Se l'espansione causa una riallocazione, TUTTI gli iteratori vengono invalidati.
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>